home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / lguest.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.1 KB  |  61 lines

  1. /* Things the lguest guest needs to know.  Note: like all lguest interfaces,
  2.  * this is subject to wild and random change between versions. */
  3. #ifndef _LINUX_LGUEST_H
  4. #define _LINUX_LGUEST_H
  5.  
  6. #ifndef __ASSEMBLY__
  7. #include <linux/time.h>
  8. #include <asm/irq.h>
  9. #include <asm/lguest_hcall.h>
  10.  
  11. #define LG_CLOCK_MIN_DELTA    100UL
  12. #define LG_CLOCK_MAX_DELTA    ULONG_MAX
  13.  
  14. /*G:032 The second method of communicating with the Host is to via "struct
  15.  * lguest_data".  Once the Guest's initialization hypercall tells the Host where
  16.  * this is, the Guest and Host both publish information in it. :*/
  17. struct lguest_data
  18. {
  19.     /* 512 == enabled (same as eflags in normal hardware).  The Guest
  20.      * changes interrupts so often that a hypercall is too slow. */
  21.     unsigned int irq_enabled;
  22.     /* Fine-grained interrupt disabling by the Guest */
  23.     DECLARE_BITMAP(blocked_interrupts, LGUEST_IRQS);
  24.  
  25.     /* The Host writes the virtual address of the last page fault here,
  26.      * which saves the Guest a hypercall.  CR2 is the native register where
  27.      * this address would normally be found. */
  28.     unsigned long cr2;
  29.  
  30.     /* Wallclock time set by the Host. */
  31.     struct timespec time;
  32.  
  33.     /* Async hypercall ring.  Instead of directly making hypercalls, we can
  34.      * place them in here for processing the next time the Host wants.
  35.      * This batching can be quite efficient. */
  36.  
  37.     /* 0xFF == done (set by Host), 0 == pending (set by Guest). */
  38.     u8 hcall_status[LHCALL_RING_SIZE];
  39.     /* The actual registers for the hypercalls. */
  40.     struct hcall_args hcalls[LHCALL_RING_SIZE];
  41.  
  42. /* Fields initialized by the Host at boot: */
  43.     /* Memory not to try to access */
  44.     unsigned long reserve_mem;
  45.     /* KHz for the TSC clock. */
  46.     u32 tsc_khz;
  47.     /* Page where the top-level pagetable is */
  48.     unsigned long pgdir;
  49.  
  50. /* Fields initialized by the Guest at boot: */
  51.     /* Instruction range to suppress interrupts even if enabled */
  52.     unsigned long noirq_start, noirq_end;
  53.     /* Address above which page tables are all identical. */
  54.     unsigned long kernel_address;
  55.     /* The vector to try to use for system calls (0x40 or 0x80). */
  56.     unsigned int syscall_vec;
  57. };
  58. extern struct lguest_data lguest_data;
  59. #endif /* __ASSEMBLY__ */
  60. #endif    /* _LINUX_LGUEST_H */
  61.